package com.smart.community.work.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;

/**
 * 保洁区域DTO
 * 
 * 严格按照《Java后端SpringBoot代码开发规范_重构版.md》DTO规范实现：
 * - 使用@Data注解：自动生成getter/setter方法
 * - 参数验证：使用JSR-303注解进行参数验证
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 序列化支持：实现Serializable接口
 * - 字段命名：使用驼峰命名法
 * - 类型安全：使用具体的类型而不是Object
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
@Schema(description = "保洁区域DTO")
public class CleaningAreaDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    @Schema(description = "区域名称", example = "1号楼大厅", required = true)
    @NotBlank(message = "区域名称不能为空")
    @Size(max = 100, message = "区域名称长度不能超过100个字符")
    private String areaName;

    @Schema(description = "区域类型", example = "公共区域", required = true)
    @NotBlank(message = "区域类型不能为空")
    @Size(max = 20, message = "区域类型长度不能超过20个字符")
    private String areaType;

    @Schema(description = "社区ID", example = "1", required = true)
    @NotNull(message = "社区ID不能为空")
    private Long communityId;

    @Schema(description = "具体位置", example = "1号楼1层大厅")
    @Size(max = 200, message = "具体位置长度不能超过200个字符")
    private String location;

    @Schema(description = "保洁标准", example = "每日清扫，每周消毒")
    @Size(max = 1000, message = "保洁标准长度不能超过1000个字符")
    private String cleaningStandard;

    @Schema(description = "保洁频次", example = "每日", required = true)
    @NotBlank(message = "保洁频次不能为空")
    @Size(max = 20, message = "保洁频次长度不能超过20个字符")
    private String frequency;

    @Schema(description = "负责人用户ID", example = "100")
    private Long responsibleUserId;

    @Schema(description = "状态", example = "1", required = true)
    @NotNull(message = "状态不能为空")
    private Integer status;

    @Schema(description = "创建人ID", example = "1")
    private Long createBy;
}
